<template>
  <a-config-provider :locale="locale">
    <router-view></router-view>
  </a-config-provider>
</template>

<script setup lang="ts">
import zhCN from 'ant-design-vue/lib/locale/zh_CN'
import { onMounted, onBeforeUnmount } from 'vue'
import { useUserStore } from './stores/user'
import { useRouter } from 'vue-router'

const locale = zhCN
const userStore = useUserStore()
const router = useRouter()

// 定期检查登录状态（每15分钟）
let loginCheckInterval: number | null = null

// 初始化应用
onMounted(() => {
  console.log('[应用] 初始化，检查登录状态')
  
  // 检查localStorage中是否有必要的登录信息
  const token = localStorage.getItem('accessToken')
  const userInfo = localStorage.getItem('userInfo')
  const isLoggedInFlag = localStorage.getItem('isLoggedIn')
  
  console.log('[应用] 初始化时本地存储状态:', { 
    hasToken: !!token, 
    hasUserInfo: !!userInfo, 
    isLoggedInFlag 
  })
  
  // 首次检查登录状态
  const isLoggedIn = userStore.checkLoginStatus()
  console.log('[应用] 登录状态检查结果:', isLoggedIn)

  // 设置定期检查
  loginCheckInterval = window.setInterval(() => {
    console.log('[应用] 定期检查登录状态')
    try {
      const refreshResult = userStore.checkLoginStatus()
      console.log('[应用] 定期检查结果:', refreshResult ? '已登录' : '未登录')
    } catch (error) {
      console.error('[应用] 定期检查登录状态时出错:', error)
    }
  }, 15 * 60 * 1000) // 15分钟检查一次
  
  // 设置路由守卫
  router.beforeEach((to, from, next) => {
    // 需要认证的页面
    if (to.meta.requiresAuth) {
      console.log(`[路由] 访问需要认证的页面: ${to.path}`)
      
      // 首先检查是否有token
      const token = localStorage.getItem('accessToken')
      if (!token) {
        console.warn(`[路由] 未找到令牌，无法访问: ${to.path}`)
        next({ 
          path: '/login', 
          query: { redirect: to.fullPath } 
        })
        return
      }
      
      // 检查登录状态
      const isLoggedIn = userStore.checkLoginStatus()
      
      // 检查用户信息是否完整
      if (!isLoggedIn || !userStore.userInfo || !userStore.userInfo.id) {
        console.warn(`[路由] 登录状态无效，无法访问: ${to.path}`)
        
        // 清理可能无效的登录信息
        userStore.logout()
        
        next({ 
          path: '/login', 
          query: { redirect: to.fullPath } 
        })
        return
      }
      
      // 检查用户ID是否有效
      const userId = userStore.userInfo.id
      if (typeof userId === 'string' ? !parseInt(userId) : !userId) {
        console.error(`[路由] 用户ID无效: ${userId}`)
        userStore.logout()
        next({ 
          path: '/login', 
          query: { redirect: to.fullPath } 
        })
        return
      }
      
      console.log(`[路由] 认证成功，允许访问: ${to.path}`)
    }
    
    // 允许导航
    next()
  })
})

// 清理定时器
onBeforeUnmount(() => {
  if (loginCheckInterval !== null) {
    window.clearInterval(loginCheckInterval)
    loginCheckInterval = null
  }
})
</script>

<style>
#app {
  min-height: 100vh;
  background-color: #f0f2f5;
}
</style> 